package Proxy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

//我们将通过静态代理对UserServiceImpl进行功能增强，在调用select和update之前记录一些日志。写一个代理类 UserServiceProxy，
//代理类需要实现 UserService

public class 静态代理 {
//public class Client1 {
	public static void main(String[] args) {
		UserService userServiceImpl = new UserServiceImpl();
		UserService proxy = new UserServiceProxy(userServiceImpl);
//		 Logger log = LoggerFactory.getLogger(getClass());
		proxy.select();
		proxy.update();
	}
}

//Subject（抽象主题角色）:定义代理类和真实主题的公共对外方法，也是代理类代理真实主题的方法；
interface UserService {
	public void select();
	public void update();
}

//RealSubject（真实主题角色）：真正实现业务逻辑的类；
class UserServiceImpl implements UserService {
	@Override
	public void select() {
		System.out.println("查询 selectById");
	}
	@Override
	public void update() {
		System.out.println("更新 update");
	}
}

//Proxy（代理主题角色）：用来代理和封装真实主题；
class UserServiceProxy implements UserService {
	Logger log = LoggerFactory.getLogger(UserServiceProxy.class);
	private UserService target;

	public UserServiceProxy(UserService target) {
		this.target = target;
	}

	public void select() {
		log.info("汉字elect");
		target.select();
	}

	public void update() {
		log.info("update");
		target.update();
	}
}